﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using PMServiceDesk.BusinessLogic;
using PMServiceDesk.DataType;
using PMServiceDesk.Utils.Interfaz;
using PMServiceDesk.Parameters.Constantes;

namespace PMServiceDesk.Web.AppCode
{
    public class PaqueteTrabajoView
    {
        public List<PaqueteTrabajoType> PaquetesTrabajo { get; set; }
        public int TotalRegistros  { get; set; }
        public PaqueteTrabajoType PaqueteTrabajo { get; set; }
        public List<KeyValuePair<string,string>> EstadosPaqueteTrabajo { get; set; }
        public List<KeyValuePair<string, string>> UsuariosAsignado { get; set; }
        public bool NuevoRegistro { get; set; }
    }

    public static class PaqueteTrabajoIU
    {
        public static PaqueteTrabajoView Listar(PaqueteTrabajoType registroBusqueda, int paginaActual, int cantidadMostrar, string orderBy)
        {
            PaqueteTrabajoView view = new PaqueteTrabajoView();

            registroBusqueda.ProyectoId = Sesion.Usuario.ProyectoId;
            registroBusqueda.UsuarioInteresadoId = Sesion.Usuario.Id;
            registroBusqueda.RolUsuarioInteresadoId = Sesion.Usuario.RolId;

            view.PaquetesTrabajo = new PaqueteTrabajoLogic().CargarExploradorPaginado(registroBusqueda, paginaActual, cantidadMostrar, orderBy);
            view.TotalRegistros = view.PaquetesTrabajo.Capacity;

            return view;
        }

        public static string ExportarExcel(PaqueteTrabajoType registroBusqueda, List<GridJSONField> gridFields)
        {
            PaqueteTrabajoView view = new PaqueteTrabajoView();

            registroBusqueda.ProyectoId = Sesion.Usuario.ProyectoId;
            registroBusqueda.UsuarioInteresadoId = Sesion.Usuario.Id;
            registroBusqueda.RolUsuarioInteresadoId = Sesion.Usuario.RolId;

            List<PaqueteTrabajoType> l = new PaqueteTrabajoLogic().CargarExploradorPaginado(registroBusqueda);

            return InterfazUtils.FileTableHTMLGridJSON(l, gridFields, ArchivoConfig.FileServer, Sesion.Usuario.Usuario, "Tareas", ExtensionesArchivos.Excel2003);
        }

        public static PaqueteTrabajoView Editar(string id)
        {
            PaqueteTrabajoView view = new PaqueteTrabajoView();

            view.PaqueteTrabajo = new PaqueteTrabajoLogic().CargarPorId(id);
            view.EstadosPaqueteTrabajo = SoporteLogic.TransicionEstados(Sesion.Usuario.RolId, view.PaqueteTrabajo.EstadoPaqueteTrabajoId);
            view.UsuariosAsignado = SoporteLogic.TransicionUsuarios(view.PaqueteTrabajo.UsuarioAsignadoId, view.PaqueteTrabajo.EstadoPaqueteTrabajoId);

            return view;
        }

        public static string IniciarWorkflow(PaqueteTrabajoType registro)
        {
            registro.UsuarioRegistroId = Sesion.Usuario.Id;

            PaqueteTrabajoLogic logic = new PaqueteTrabajoLogic();

            logic.InicializarWorkflow(registro);

            return registro.Id;
        }

        public static List<KeyValuePair<string, string>> TransicionEstados(string estadoPaqueteTrabajoId)
        {
            return SoporteLogic.TransicionEstados(Sesion.Usuario.RolId, estadoPaqueteTrabajoId);
        }

        public static List<KeyValuePair<string,string>> TransicionUsuarios(string estadoPaqueteTrabajoId)
        {
            return SoporteLogic.TransicionUsuarios("", estadoPaqueteTrabajoId);
        }

        public static string RegistrarComentarioFinalizar(ComentarioPaqueteTrabajoType registro)
        {
            registro.FechaRegistro = DateTime.Now;
            registro.UsuarioRegistroId = Sesion.Usuario.Id;


            return new PaqueteTrabajoLogic().RegistrarComentarioFinalizar(registro);
        }
    }
}